// admin/system/handler/sys_notice_handler.go
package handler

import (
	"go-admin1/admin/system/model"
	"go-admin1/admin/system/service"
	"go-admin1/internal/common/utils"
	"strconv"

	"github.com/gin-gonic/gin"
)

// SysNoticeHandler 通知公告处理器
type SysNoticeHandler struct {
	noticeService service.SysNoticeService
}

// NewSysNoticeHandler 创建通知公告处理器实例
func NewSysNoticeHandler(noticeService service.SysNoticeService) *SysNoticeHandler {
	return &SysNoticeHandler{
		noticeService: noticeService,
	}
}

// Create 创建通知公告
func (h *SysNoticeHandler) Create(c *gin.Context) {
	var notice model.SysNotice
	if err := c.ShouldBindJSON(&notice); err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())

		return
	}

	if err := h.noticeService.Create(&notice); err != nil {
		utils.FailResponse[string](c, "创建通知公告失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "创建通知公告成功")
}

// GetByID 根据ID获取通知公告
func (h *SysNoticeHandler) GetByID(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())

		return
	}

	notice, err := h.noticeService.GetByID(id)
	if err != nil {
		utils.FailResponse[string](c, "获取通知公告失败: "+err.Error())
		return
	}
	utils.OkResponse(c, notice)
}

// Update 更新通知公告
func (h *SysNoticeHandler) Update(c *gin.Context) {
	var notice model.SysNotice
	if err := c.ShouldBindJSON(&notice); err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	if err := h.noticeService.Update(&notice); err != nil {
		utils.FailResponse[string](c, "更新通知公告失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "更新通知公告成功")
}

// Delete 删除通知公告
func (h *SysNoticeHandler) Delete(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	if err := h.noticeService.Delete(id); err != nil {
		utils.FailResponse[string](c, "删除通知公告失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "删除通知公告成功")

}

// List 通知公告列表
func (h *SysNoticeHandler) List(c *gin.Context) {
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))

	notices, total, err := h.noticeService.List(page, pageSize)
	if err != nil {
		utils.FailResponse[string](c, "获取通知公告列表失败: "+err.Error())
		return
	}
	resultData := map[string]interface{}{
		"list":  notices,
		"total": total,
	}
	utils.OkResponse(c, resultData)
}

// ListAll 所有通知公告列表
func (h *SysNoticeHandler) ListAll(c *gin.Context) {
	notices, err := h.noticeService.ListAll()
	if err != nil {
		utils.FailResponse[string](c, "获取所有通知公告失败: "+err.Error())

		return
	}
	utils.OkResponse(c, notices)
}
